home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / emula / arosdv19.lha / AROS / include / exec / lists.h < prev    next >
C/C++ Source or Header  |  1996-10-14  |  2KB  |  86 lines

  1. #ifndef EXEC_LISTS_H
  2. #define EXEC_LISTS_H
  3. /* (C) 1995 AROS - The Amiga Replacement OS */
  4.  
  5. /******************************************************************************
  6.  
  7.     FILE
  8.     $Id: lists.h,v 1.3 1996/10/14 11:16:02 digulla Exp $
  9.  
  10.     DESCRIPTION
  11.     Prototypes and macros for exec-lists.
  12.  
  13. ******************************************************************************/
  14.  
  15. /**************************************
  16.         Includes
  17. **************************************/
  18. #ifndef AROS_SYSTEM_H
  19. #   include <aros/system.h>
  20. #endif
  21. #ifndef EXEC_NODES_H
  22. #   include <exec/nodes.h>
  23. #endif
  24.  
  25.  
  26. /**************************************
  27.            Structures
  28. **************************************/
  29. /* Normal list */
  30. struct List
  31. {
  32.     struct Node * lh_Head,
  33.         * lh_Tail,
  34.         * lh_TailPred;
  35.     UBYTE      lh_Type;
  36.     BYTE      l_pad;
  37. };
  38.  
  39. /* Minimal list */
  40. struct MinList
  41. {
  42.     struct MinNode * mlh_Head,
  43.            * mlh_Tail,
  44.            * mlh_TailPred;
  45. };
  46.  
  47.  
  48. /**************************************
  49.            Makros
  50. **************************************/
  51. #define IsListEmpty(l) \
  52.     ( (((struct List *)l)->lh_TailPred) == (struct Node *)(l) )
  53.  
  54. #define IsMsgPortEmpty(mp) \
  55.       ( (((struct MsgPort *)mp)->mp_MsgList.lh_TailPred) \
  56.         == (struct Node *)(&(((struct MsgPort *)mp)->mp_MsgList)) )
  57.  
  58. #ifdef AROS_ALMOST_COMPATIBLE
  59. #   define NEWLIST(l)       (((struct List *)l)->lh_TailPred \
  60.                 = (struct Node *)(l), \
  61.                 ((struct List *)l)->lh_Tail = 0, \
  62.                 ((struct List *)l)->lh_Head \
  63.                 = (struct Node *)\
  64.                     &(((struct List *)l)->lh_Tail))
  65.  
  66. #   define GetHead(l)       (void *)(((struct List *)l)->lh_Head->ln_Succ \
  67.                 ? ((struct List *)l)->lh_Head \
  68.                 : (struct Node *)0)
  69. #   define GetTail(l)       (void *)(((struct List *)l)->lh_TailPred->ln_Pred \
  70.                 ? ((struct List *)l)->lh_TailPred \
  71.                 : (struct Node *)0)
  72. #   define GetSucc(n)       (void *)(((struct Node *)n)->ln_Succ->ln_Succ \
  73.                 ? ((struct Node *)n)->ln_Succ \
  74.                 : (struct Node *)0)
  75. #   define GetPred(n)       (void *)(((struct Node *)n)->ln_Pred->ln_Pred \
  76.                 ? ((struct Node *)n)->ln_Pred \
  77.                 : (struct Node *)0)
  78. #endif
  79.  
  80.  
  81. /******************************************************************************
  82. *****  ENDE exec/lists.h
  83. ******************************************************************************/
  84.  
  85. #endif /* EXEC_LISTS_H */
  86.